/**
 * https://leetcode-cn.com/problems/merge-sorted-array/
 * 合并两个有序的数组
 * @param nums1 
 * @param m 
 * @param nums2 
 * @param n 
 */
export function merge(nums1: number[], m: number, nums2: number[], n: number): void {
    let len = nums1.length - 1;
    let n1 = m - 1,
        n2 = n - 1;


    // 遍历nums1
    while (len >= 0) {
        // 只要有一方小于0, 直接退出
        if (n1 < 0 || n2 < 0) break;
        // 右 >= 左      
        nums1[len--] = (nums2[n2] >= nums1[n1]) ? nums2[n2--] : nums1[n1--]
    }

    // 右边数组还没处理完，合并到左边的数组
    while (n2 >= 0) {
        nums1[len--] = nums2[n2--]
    }

}

// function merge(nums1: number[], m: number, nums2: number[], n: number): void {
//     let len = nums1.length - 1;
//     let n1 = m - 1,
//         n2 = n - 1;


//     // 遍历nums1
//     while(len >= 0) {
//         // 只要有一方小于0, 直接退出
//         if (n1 < 0 || n2 < 0) break;
//         const e1 = nums1[n1],
//             e2 = nums2[n2];
//         // 右 >= 左      
//         if (e1 <= e2) {
//             nums1[len--] = e2;
//             n2--;
//         } else {
//             nums1[len--] = e1
//             n1--;
//         }
//     }

//     // 右边数组还没处理完，合并到左边的数组
//     while (n2 >= 0) {
//         nums1[len--] = nums2[n2--]
//     }
// }

const arr1 = [-1,0,0,3,3,3,0,0,0],
      n1 = 6,
      arr2 = [1, 2, 2],
      n2 = 3
// const arr1 = [0],
//       n1 = 0,
//       arr2 = [1],
//       n2 = 1

// const arr1 = [4, 0, 0, 0, 0, 0],
//     n1 = 1,
//     arr2 = [1, 2, 3, 5, 6],
//     n2 = 5
// const arr1 = [1,2,3,0,0,0],
//       n1 = 3,
//       arr2 = [2,5,6],
//       n2 = 3
merge(arr1, n1, arr2, n2);
// console.log(arr1)